home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 10
/
FM Towns Free Software Collection 10.iso
/
ms_dos
/
tool
/
dprint
/
dp_print.c
< prev
next >
Wrap
Text File
|
1994-08-11
|
5KB
|
241 lines
/*
8086|Printman/POSTCARD ハガキ印刷モジュール
Copyright (c) 1993,94 Delmonta
*/
#include<string.h>
#include<del_prn.h>
#include"dprint.h"
enum PRNBIOS Prn_machine = PRNBIOS_TOWNS;
enum PRNMODE Prn_mode = PRNMODE_ESCP;
struct DFLFILE Dflfile =
{
PRNBIOS_TOWNS,PRNMODE_ESCP,
850,300,
{PROP_LEFT,PROP_RIGHT,PROP_CENTER,PROP_CENTER,PROP_FLEFT}
};
static struct POSTCARD Printdata;
static unsigned Lmrgin;
/*---------------------------------------------------------------------------*/
static void putdata(unsigned ypos)
{
static int Lpos,Rpos;
int l,p;
l = strlen(Printdata.data[ypos]);
switch (Dflfile.printop[ypos])
{
case PROP_LEFT: p = 0; break;
case PROP_RIGHT: p = 24-l; break;
case PROP_CENTER: p = (24-l)/2; break;
case PROP_FLEFT: p = Lpos; break;
case PROP_FRIGHT: p = Rpos-l; break;
case PROP_FCENTER: p = (Rpos-Lpos-l)/2 + Lpos; break;
}
if (p<0)
p = 0;
Lpos = p;
Rpos = p+l;
prn_setcarridge(MM2DOTS(25)-Lmrgin);
if (ypos>=3)
prn_double(2,2);
else
prn_double(2,1);
while (p--)
prn_putchar(' ');
prn_putstr(Printdata.data[ypos]);
prn_double(1,1);
prn_linefeed(MM2DOTS(9.5));
}
/*---------------------------------------------------------------------------*/
void dp_printcard(unsigned start,unsigned end)
{
if (start > end)
{
unsigned temp = end;
end = start;
start = temp;
}
for ( start=start ; start<=end ; start++)
{
int i;
unsigned code[5];
unsigned umrgin = Dflfile.umrgin*9L/127;
Lmrgin = Dflfile.lmrgin*9L/127;
Printdata = *Card[start];
prn_init();
prn_tategaki(PRNTATE_NOHALF);
prn_linefeed(MM2DOTS(10)-umrgin);
if (Printdata.zipcode[0] == -1)
{ for (i=0 ; i<5 ; i++)
code[i] = 0x8140;
}
else /* 0x8140 == ' ' */
{ /* 0x824f == '0' */
code[0] = 0x824f + Printdata.zipcode[0]/100;
code[1] = 0x824f + (Printdata.zipcode[0]/10)%10;
code[2] = 0x824f + Printdata.zipcode[0]%10;
if (Printdata.zipcode[1] == -1)
code[3] = code[4] = 0x8140;
else
{
code[3] = 0x824f + Printdata.zipcode[1]/10;
code[4] = 0x824f + Printdata.zipcode[1]%10;
}
}
for (i=0 ; i<3 ; i++)
{
prn_setcarridge(MM2DOTS(12)-Lmrgin);
prn_putchar(code[4-i]);
prn_linefeed(0);
putdata(i);
}
prn_setcarridge(MM2DOTS(12)-Lmrgin);
prn_putchar(code[1]);
prn_linefeed(MM2DOTS(9.5));
prn_setcarridge(MM2DOTS(12)-Lmrgin);
prn_putchar(code[0]);
prn_linefeed(0);
putdata(3);
putdata(4);
prn_formfeed();
}
prn_init();
}
/*---------------------------------------------------------------------------*/
static void set_printop(void)
{
static struct SHEETSEL mode[] =
{ {19,"左寄せ"},
{27,"右寄せ"},
{35,"中央寄せ"},
{45,"左合わせ"},
{55,"右合わせ"},
{65,"中央合わせ"},
};
static struct SHEETDAT sheet[] =
{ {SHEET_SELECT,"住所1",0,3,mode},
{SHEET_SELECT,"住所2",0,6,mode},
{SHEET_SELECT,"住所3",0,6,mode},
{SHEET_SELECT,"氏名1",0,6,mode},
{SHEET_SELECT,"氏名2",0,6,mode},
};
int ret[5];
int i;
for (i=0 ; i<5 ; i++)
ret[i] = (int)Dflfile.printop[i];
if (dp_sheetselect(SYSLINE_START,sheet,5,ret))
{
for (i=0 ; i<5 ; i++)
Dflfile.printop[i] = (enum PRINTOP)ret[i];
}
}
/*---------------------------------------------------------------------------*/
static void prnsetup(void)
{
static struct SHEETSEL
com[] = { {19,"PC-9800"},
{28,"FMR/TOWNS"},
{39,"DOS/V"},
{50,"J-3100/AX"}
},
prn[] = { {19,"ESC/P24-J84"},
{32,"MSX漢字プリンタ"},
{51,"PC-PR201/101H"},
{66,"FMPRシリーズ"},
};
static struct SHEETDAT sheet[] =
{
{SHEET_SELECT,"コンピューター機種",0,4,com},
{SHEET_SELECT,"プリンタ機種",0,4,prn},
{SHEET_VALUE2,"上マージン(mm)",-32699,32699,NULL},
{SHEET_VALUE2,"左マージン(mm)",-32699,32699,NULL},
};
int ret[4];
ret[0] = Dflfile.prn_machine;
ret[1] = Dflfile.prn_mode;
ret[2] = Dflfile.umrgin;
ret[3] = Dflfile.lmrgin;
if (dp_sheetselect(SYSLINE_START,sheet,4,ret))
{
Prn_machine = Dflfile.prn_machine = (enum PRNBIOS)ret[0];
Prn_mode = Dflfile.prn_mode = (enum PRNMODE)ret[1];
Dflfile.umrgin = ret[2];
Dflfile.lmrgin = ret[3];
}
}
/*---------------------------------------------------------------------------*/
void dp_printmenu(void)
{
static struct MENUDAT menu[] =
{
{'P',"印刷","ハガキに宛名を印刷します"},
{'S',"プリンタ設定","プリンタの機種などを設定します"},
{'M',"各行設定","各行の印刷方法を設定します"},
};
unsigned s,e;
prnmenu_rep:
switch (dp_menuselect("F6:印刷メニュー",3,menu))
{
case -1:
return;
case 0:
if (!input_st_ed("印刷",&s,&e))
goto prnmenu_rep;
dp_printcard(s,e);
break;
case 1:
prnsetup();
break;
case 2:
set_printop();
break;
}
goto prnmenu_rep;
}